// 发送手机验证码api      用户注册         用户登录         获取用户信息
import {reqGetPhoneCode,reqUserRegister,reqUserLogin,reqgetUserInfo,reqUserLogout} from '@/api'
// 引入本地存储token方法
import {setToken,getToken,removeToken} from '@/utils/token'
const state = {
  // 手机验证码
  phoneCode:'',
  // 用户登录token 如果本地存储没有token 则为空字符串，再次发起请求会自动获取token
  token:getToken(),
  // 用户信息
  userInfo:{}
}

const getters = {}

const mutations = {
  // 手机验证码
  SETCODE(state,code){
    state.phoneCode = code
  },
  // 用户登录
  USESRLOGIN(state,data){
    state.token = data.token
  },
  // 用户信息
  GETUSERINFO(state,data){
    state.userInfo = data
  },
  // 退出登录
  USERLOGOUT(state){
    state.token = ''
    state.userInfo = {}
    removeToken()
  }
}

const actions = {
  // 发送手机验证码
 async sendCode(context,phone){
    const res = await reqGetPhoneCode(phone)
    if(res.code === 200){
      context.commit('SETCODE',res.data)
      return "ok";
    }else{
      return Promise.reject(new Error('fail'))
    }
    
  },
  // 用户注册
  async UserRegister(context,data){
    const res= await reqUserRegister(data)   
    if(res.code === 200){
      return "ok";
    }else{
      return Promise.reject(new Error('fail'))
    }
    
  },
  // 用户登录
  async UserLogin(context,user){
    const res = await reqUserLogin(user)
    if(res.code === 200){
      //本地存储token      
      setToken(res.data.token)
      context.commit('USESRLOGIN',res.data)
      return "ok";
    }else{
      return Promise.reject(new Error('fail'))
    }
    
  },
  // 获取用户信息
  async getUserInfo(context){
    const res = await reqgetUserInfo()
    if(res.code === 200){     
      context.commit('GETUSERINFO',res.data)
      return "ok";
    }else{
      return Promise.reject(new Error('fail'))
    }
  },
  // 退出登录
  async userLogout(context){
     const res=await reqUserLogout()
     if(res.code === 200){
      // 数据操作在mutations中
      context.commit('USERLOGOUT')
      return "ok";
     }else{
       return Promise.reject(new Error('fail'))
     }
  }
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}